/**
 * HTTP请求封装模块 - 前后端API通信的核心封装
 *
 * 开发人员：唐梓鑫
 * 开发时间：2025-10-20 至 2025-10-25
 * 模块职责：封装Axios HTTP客户端，提供统一的API请求处理、拦截器、错误处理等功能
 *
 * 技术要点：
 * - Axios 1.7.7 HTTP客户端封装
 * - JWT认证Token自动注入机制
 * - 多租户企业ID和用户ID自动携带
 * - 全局错误处理和401认证失效处理
 * - 请求和响应拦截器统一管理
 *
 * 开发故事：负责前端API通信的核心封装，与后端安全认证系统深度集成，为整个前端应用提供稳定可靠的网络通信能力。
 */
import axios from 'axios'
import router from '../router'

const http = axios.create({ baseURL: '/api' })

http.interceptors.request.use(config => {
  const token = localStorage.getItem('token')
  if (token) config.headers.Authorization = `Bearer ${token}`
  
  // 添加企业ID头（从localStorage获取，如果没有则使用默认值1）
  const enterpriseId = localStorage.getItem('enterpriseId') || '1'
  config.headers['X-Enterprise-Id'] = enterpriseId
  
  // 添加用户ID头（从localStorage获取）
  const userId = localStorage.getItem('userId')
  if (userId) config.headers['X-User-Id'] = userId
  
  return config
})

http.interceptors.response.use(resp => resp, err => {
  const status = err?.response?.status
  const msg = err?.response?.data?.message || err.message || '请求失败'
  if (status === 401) {
    localStorage.removeItem('token')
    const to = '/login?redirect=' + encodeURIComponent(router.currentRoute.fullPath)
    if (router.currentRoute.path !== '/login') router.replace(to)
  }
  console.error('API error:', msg)
  return Promise.reject(err)
})

export default http


